<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// JavaScript 所有数字都保存成 64 位浮点数，这给数值的表示带来了两大限制。
	// 一是数值的精度只能到 53 个二进制位（相当于 16 个十进制位），大于这个范围的整数，
	// JavaScript 是无法精确表示的，这使得 JavaScript 不适合进行科学和金融方面的精确计算。
	// 二是大于或等于2的1024次方的数值，JavaScript 无法表示，会返回`Infinity`。
	// console.log(9999999999*9999999999);// 99999999980000000000
	// console.log(Math.pow(2,1024));// Infinity
	// console.log(Math.pow(2,1023));// Infinity
	// console.log(99999999*999999999999);// 99999998999900000000
	// console.log(99999999*999999999999+2);// 99999998999900000000
	
	// 引入了一种新的数据类型 `BigInt`（大整数），来解决这个问题。
	// `BigInt` 只用来表示整数，没有位数的限制，任何位数的整数都可以精确表示。
	// console.log(99999999n*999999999999n);// 99999998999900000001n
	// console.log(typeof 1);// number
	// console.log(typeof 1n);// bigint
	// let m = 99999999999999n;
	// let n = 9999999n;
	// console.log(m*n);// 99999899999990000001n
	// console.log(m*n+1n);// 99999899999990000002n
	
	// 为了与 Number 类型区别，`BigInt` 类型的数据必须添加后缀`n`。
	// console.log(typeof 1);// nubmer
	// console.log(typeof 1n);// bigint
	
	// - `BigInt `与普通整数是两种值，它们之间并不全等。
	// console.log(1 == 1n);// true
	// console.log(1 === 1n);// false
	// console.log(Object.is(1,1n));// false
	
	// - `typeof`运算符对于` BigIn`t 类型的数据返回`bigint`。
	// console.log(typeof 1n);// bigint

	// 可以转换
	// let a = 1n;
	// console.log(typeof a);// bigint
	// console.log(typeof Number(a));// number
	// let b = 10;
	// let c = 20;
	// console.log(BigInt(b*c));// 200n
</script>
</html>